package fr.imac.ProjetAndroid;

import java.text.DateFormatSymbols;
import java.util.Calendar;

/**
 * Cette classe permet de sélectionner plusieurs jours de la semaine codés dans un seul entier (à l'aide d'un décalage de bits).
 *
 */
public class DaysOfWeek {

	/**
	 * Liste des jours de la semaine avec dimanche en premier ("norme" US)
	 */
	public static final int[] DAYS_OF_WEEK = new int[]{
		Calendar.SUNDAY,
		Calendar.MONDAY,
		Calendar.TUESDAY,
		Calendar.WEDNESDAY,
		Calendar.THURSDAY,
		Calendar.FRIDAY,
		Calendar.SATURDAY
	};

	private int mDays;

	/**
	 * 
	 * @param days les jours de la semaine cod� dans un entier
	 */
	public DaysOfWeek(int days) {
		mDays = days;
	}
	
	/**
	 * Test si le jour de la semaine est positionn�
	 * @param day le jour de la semaine (ex : {@link Calendar#SUNDAY}, {@link Calendar#MONDAY}, ...)
	 * @return <code>true</code> si le jour est positionn�, <code>false</code> sinon
	 */
    public boolean isSet(int day) {
        return ((mDays & (1 << day)) > 0);
    }

    /**
     * Modifi� le jour de la semaine dans l'entier
     * @param day le jour de la semaine (ex : {@link Calendar#SUNDAY}, {@link Calendar#MONDAY}, ...)
     * @param set <code>true</code> pour positionner le jour, <code>false</code> pour le supprimer
     */
    public void set(int day, boolean set) {
        if (set) {
            mDays |= (1 << day);
        } else {
            mDays &= ~(1 << day);
        }
    }

    /**
     * 
     * @param dow
     */
    public void set(DaysOfWeek dow) {
        mDays = dow.mDays;
    }

    /**
     * 
     * @return la s�lection de jours cod�e
     */
    public int getCoded() {
        return mDays;
    }
    
    
    /**
     * Permet de corriger le bogue (?) des m�thodes {@link DateFormatSymbols}
     */
    public static String[] getDaysOfWeek (String[] daysOfWeek){
    	
    	if(daysOfWeek.length>7){
    		String[] newDaysOfWeek=new String[7];
    		int delta=daysOfWeek.length-7;
    		for(int i=delta; i<daysOfWeek.length; i++)
    			newDaysOfWeek[i-delta]=daysOfWeek[i];
    		return newDaysOfWeek;
    	}
    	return daysOfWeek;
    }
}
